home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / winclock / clock.frm < prev    next >
Text File  |  1999-10-17  |  5KB  |  176 lines

  1. VERSION 5.00
  2. Begin VB.Form Form1 
  3.    AutoRedraw      =   -1  'True
  4.    BorderStyle     =   0  'None
  5.    Caption         =   "Form1"
  6.    ClientHeight    =   1605
  7.    ClientLeft      =   5250
  8.    ClientTop       =   3750
  9.    ClientWidth     =   1605
  10.    LinkTopic       =   "Form1"
  11.    ScaleHeight     =   1605
  12.    ScaleMode       =   0  'User
  13.    ScaleWidth      =   1605
  14.    ShowInTaskbar   =   0   'False
  15.    Begin VB.Timer Timer1 
  16.       Interval        =   1
  17.       Left            =   600
  18.       Top             =   480
  19.    End
  20. End
  21. Attribute VB_Name = "Form1"
  22. Attribute VB_GlobalNameSpace = False
  23. Attribute VB_Creatable = False
  24. Attribute VB_PredeclaredId = True
  25. Attribute VB_Exposed = False
  26. Option Explicit
  27. Dim second As Long, minute As Long, hour As Long
  28. Dim second_Prv As Long, minute_Prv As Long, hour_Prv As Long
  29. Dim Pos_x(1 To 60) As Double
  30. Dim Pos_y(1 To 60) As Double
  31. Dim Minute_to_x As Double, Minute_to_y As Double
  32. Dim Hour_to_x As Double, Hour_to_y As Double
  33. Dim swp As Long, shp As Long
  34. Dim fwp As Long, fhp As Long
  35. Dim i As Long, j As Long, pi As Double, c As Long
  36.  
  37. Private Sub Form_DblClick()
  38. Me.Visible = False
  39. Unload Me
  40. End
  41. End Sub
  42.  
  43.  
  44. Private Sub Form_Load()
  45. 'Storing Pi
  46. pi = 3.1415629
  47. 'Scr Width and height by pixels
  48. swp = Screen.Width / Screen.TwipsPerPixelX
  49. shp = Screen.Height / Screen.TwipsPerPixelY
  50. 'Form Width and height by pixels. Of course
  51. 'we are not setting them here, but storing
  52. fwp = 105
  53. fhp = 105
  54. 'Here, we are creating an elliptic region,
  55. c = CreateEllipticRgn(0, 0, 103, 102)
  56. 'As you see, the function returnes an id for the region,
  57. 'And we are seting the region as our form
  58. SetWindowRgn Form1.hWnd, c, True
  59. With Form1
  60.    .BackColor = vbBlack
  61.    .Picture = LoadPicture(VB.App.Path + "\clock.bmp")
  62.    .Move Screen.Width - (fwp + 10) * Screen.TwipsPerPixelX, _
  63.          10 * Screen.TwipsPerPixelY, _
  64.          fwp * Screen.TwipsPerPixelX, _
  65.          fhp * Screen.TwipsPerPixelY
  66. End With
  67. 'Storing these calculatings into an array matrix,
  68. 'And calling them from there,
  69. 'is faster around 20 times than calculating.
  70. 'This, is a mathamatical process, But I think you can
  71. 'understand what's going on here.
  72. For i = 1 To 60
  73. Pos_x(i) = 35 * Cos(-(pi / 2) + (i * (pi / 30)))
  74. Pos_y(i) = 35 * Sin(-(pi / 2) + (i * (pi / 30)))
  75. Next i
  76. 'Set scalemode to pixels.
  77. Form1.ScaleMode = vbPixels
  78. End Sub
  79.  
  80. Private Sub Timer1_Timer()
  81. 'Take the time of computer
  82. second = Val(Right(Time$, 2))
  83. second_Prv = second - 1
  84. minute = Val(Mid(Time$, 4, 2))
  85. minute_Prv = minute - 1
  86. 'The clock is analogue. So:
  87. hour = Val(Left(Time$, 2)) Mod 12
  88. hour_Prv = hour - 1
  89. 'Reset:
  90.  
  91. If hour = 0 Then hour = 12: hour_Prv = 11
  92. If minute = 0 Then minute = 60: minute_Prv = 59
  93. If second = 0 Then second = 60: second_Prv = 59
  94. If hour = 1 Then hour_Prv = 0
  95. If minute = 1 Then minute_Prv = 60
  96. If second = 1 Then second_Prv = 60
  97.   
  98. 'We need to do the clearing together, and first.
  99. 'Or something we drawed might be cleared
  100.  
  101. 'Clear
  102. Form1.Line (51, 50)-(51 + Pos_x(second_Prv), 50 + Pos_y(second_Prv)), vbWhite
  103.  
  104. Minute_to_x = 51 + 0.9 * Pos_x(minute_Prv)
  105. Minute_to_y = 50 + 0.9 * Pos_y(minute_Prv)
  106. draw_minute False
  107.  
  108. If second = 60 Then
  109.    'This means a first moment of a minute
  110.    'Clearing
  111.    If minute < 12 Or minute = 60 Then
  112.       Hour_to_x = 51 + 0.7 * Pos_x(hour_Prv * 5 + Int(59 / 12))
  113.       Hour_to_y = 50 + 0.7 * Pos_y(hour_Prv * 5 + Int(59 / 12))
  114.    Else
  115.       If minute = 12 Then
  116.          Hour_to_x = 51 + 0.7 * Pos_x(hour * 5 + Int(minute_Prv / 12))
  117.          Hour_to_y = 50 + 0.7 * Pos_y(hour * 5 + Int(minute_Prv / 12))
  118.       Else
  119.          If hour = 12 Then hour = 0
  120.          Hour_to_x = 51 + 0.7 * Pos_x(hour * 5 + Int(minute_Prv / 12))
  121.          Hour_to_y = 50 + 0.7 * Pos_y(hour * 5 + Int(minute_Prv / 12))
  122.          If hour = 0 Then hour = 12
  123.       End If
  124.    End If
  125.    draw_hour False
  126. End If
  127. 'Drawing:
  128. Draw_Second
  129. Minute_to_x = 51 + 0.9 * Pos_x(minute)
  130. Minute_to_y = 50 + 0.9 * Pos_y(minute)
  131. draw_minute True
  132.  
  133. If hour = 12 Then hour = 0
  134. If minute = 60 Then minute = 0
  135. If hour = 0 And minute < 12 Then hour = 12
  136. If hour = 0 And minute = 0 Then hour = 12
  137.  
  138. Hour_to_x = 51 + 0.7 * Pos_x(hour * 5 + Int(minute / 12))
  139. Hour_to_y = 50 + 0.7 * Pos_y(hour * 5 + Int(minute / 12))
  140. draw_hour True
  141. End Sub
  142.  
  143. Sub Draw_Second()
  144. Form1.Line (51, 50)-(51 + Pos_x(second), 50 + Pos_y(second)), RGB(128, 128, 128)
  145. End Sub
  146. Sub draw_minute(Draw_Or_Clear As Boolean)
  147. 'I think, easy to understand
  148.    Dim Draw_Color As ColorConstants
  149.    If Draw_Or_Clear = True Then
  150.       Draw_Color = RGB(128, 128, 128)
  151.    Else
  152.       Draw_Color = vbWhite
  153.    End If
  154.    For i = 50 To 52
  155.       For j = 49 To 51
  156.          Form1.Line (i, j)-(Minute_to_x, Minute_to_y), Draw_Color
  157.       Next j
  158.    Next i
  159. End Sub
  160.  
  161. Sub draw_hour(Draw_Or_Clear As Boolean)
  162. 'I think, easy to understand
  163.    Dim Draw_Color As ColorConstants
  164.    If Draw_Or_Clear = True Then
  165.       Draw_Color = RGB(128, 128, 128)
  166.    Else
  167.       Draw_Color = vbWhite
  168.    End If
  169.    For i = 49 To 53
  170.       For j = 48 To 52
  171.          Form1.Line (i, j)-(Hour_to_x, Hour_to_y), Draw_Color
  172.       Next j
  173.    Next i
  174. End Sub
  175.  
  176.